

# 学生信息
Students = [{'sid':'001', 'name':'张三', 'age':15, 'gender':'男'},
            {'sid':'002', 'name':'丽丝', 'age':17, 'gender':'女'},
            {'sid':'003', 'name':'王五', 'age':18, 'gender':'男'},
            {'sid':'004', 'name':'张三', 'age':19, 'gender':'男'}]


def menu():
    print("****************************************")
    print("*          学生管理系统               *")
    print("*          1. 添加新学生信息           *")
    print("*          2. 通过学号修改学生信息      *")
    print("*          3. 通过学号删除学生信息      *")
    print("*          4. 通过姓名删除学生信息      *")
    print("*          5. 通过学号查询学生信息      *")
    print("*          6. 通过姓名查询学生信息      *")
    print("*          7. 显示所有学生信息         *")
    print("*          8. 退出系统                *")
    print("****************************************")


# 先检查对应学号是否存在；
# 不存在，进行添加；存在，进行报错提示
def add(sid,name,age,gender):
    tmp = search_by_sid(sid)
    if tmp:
        print(f'--添加失败：新添加的学生学号{sid}已存在')
    else:
        student = {'sid':sid,'name':name,'age':age,'gender':gender}
        Students.append(student)
        print(f"成功添加学生：{student['name']},学号{student['sid']},年龄{student['age']},性别{student['gender']}")


# 先获取指定学号学生的索引
# 然后对指定学生进行编辑
def edit(sid):
    index = 0
    for i in Students:
        if sid == i['sid']:
            break
        else:
            index += 1

    if index == len(Students):
        print('--修改失败：该学生系统无该学号学生')
    else:
        try:
            print(f"--开始修改信息：学生{Students[index]['name']},学号为{Students[index]['sid']},"
                  f"年纪{Students[index]['age']},性别{Students[index]['gender']}")
            name_tmp = input('--请输入该学生修改后的姓名：')
            age_tmp = int(input('--请输入该学生修改后的年纪【请输入整数】：'))
            Students[index]['name'] = name_tmp
            Students[index]['age'] = age_tmp
            print(f"--该学号{Students[index]['sid']}学生信息修改为:学生{Students[index]['name']},"
                  f"年纪{Students[index]['age']},性别{Students[index]['gender']}")
        except Exception:
            print('--修改失败：该学生信息修改失败')


# 循环查询对应学号学生并删除；查找不到提示删除失败
def delete_by_sid(sid):
    flag = 0
    i = 0
    while i<len(Students):
        if sid == Students[i]['sid']:
            print(f"--成功删除学生{Students[i]['name']}：学号为{Students[i]['sid']},"
                  f"年纪{Students[i]['age']},性别{Students[i]['gender']}")
            del Students[i]
            flag += 1
        else:
            i += 1
    if flag == 0:
        print('--删除失败：当前系统无该学号的学生')


# 循环查询对应姓名学生并删除；查找不到提示删除失败
def delete_by_name(name):

    flag = 0
    i = 0
    while i<len(Students):
        if name == Students[i]['name']:
            print(f"--成功删除学生{Students[i]['name']}：学号为{Students[i]['sid']},"
                  f"年纪{Students[i]['age']},性别{Students[i]['gender']}")
            del Students[i]
            flag += 1
        else:
            i += 1
    if flag == 0:
        print('--删除失败：当前系统无该姓名的学生')


# 循环查找对应学号学生并返回
def search_by_sid(sid):
    l = []
    for i in Students:
        if sid == i['sid']:
            l.append(i)
    return l


# 循环查找对应姓名学生并返回
def search_by_name(name):
    l = []
    for i in Students:
        if name == i['name']:
            l.append(i)
    return l


# 获取所有学生信息并展示
def search_all():
    if Students:
        for i in Students:
            print(f"--学生{i['name']},学号为{i['sid']},年纪{i['age']},性别{i['gender']}")
    else:
        print(f'--当前学生管理系统无任何学生')


# 在输入各功能时，先进行列表判空
def control():
    while True:
        menu()
        select_op = input("输入编号选择操作：")

        if select_op == '1':
            try:
                sid_tmp_1 = input('--请输入需要添加的学生学号：')
                name_tmp_1 = input('--请输入需要添加的学生姓名：')
                age_tmp_1 = int(input('--请输入需要添加的学生年龄：'))
                gender_tmp_1 = input('--请输入需要添加的学生性别：【男、女】')
                if gender_tmp_1 != '男' and gender_tmp_1 != '女':
                    print('--添加失败：添加的学生性别输入错误')
                else:
                    add(sid_tmp_1,name_tmp_1,age_tmp_1,gender_tmp_1)
            except Exception:
                print('--学生信息添加失败')
        elif select_op == '2':
            if Students:
                sid_tmp_2 = input('--请输入需要修改的学生学号：')
                edit(sid_tmp_2)
            else:
                print('--修改失败：当前学生管理系统无任何学生')
        elif select_op == '3':
            if Students:
                sid_tmp_3 = input('--请输入需要删除的学生学号：')
                delete_by_sid(sid_tmp_3)
            else:
                print('--删除失败：当前学生管理系统无任何学生')
        elif select_op == '4':
            if Students:
                name_tmp_4 = input('--请输入需要删除的学生姓名：')
                delete_by_name(name_tmp_4)
            else:
                print('--删除失败：当前学生管理系统无任何学生')
        elif select_op == '5':
            if Students:
                sid_tmp_5 = input('--请输入需要查询的学生编号：')
                students_tmp5 = search_by_sid(sid_tmp_5)
                if students_tmp5:
                    for i in students_tmp5:
                        print(f"--学生{i['name']}：学号为{i['sid']},年纪{i['age']},性别{i['gender']}")
                else:
                    print(f'--在当前学生系统中，未找到学生编号为{sid_tmp_5}的学生')
            else:
                print('--查询失败：当前学生管理系统无任何学生')
        elif select_op == '6':
            if Students:
                name_tmp_6 = input('--请输入需要查询的学生编号：')
                students_tmp6 = search_by_name(name_tmp_6)
                if students_tmp6:
                    for i in students_tmp6:
                        print(f"--学生{i['name']}：学号为{i['sid']},年纪{i['age']},性别{i['gender']}")
                else:
                    print(f'--在当前学生系统中，未找到学生编号为{name_tmp_6}的学生')
            else:
                print('--查询失败：当前学生管理系统无任何学生')
        elif select_op == '7':
            search_all()
        elif select_op == '8':
            break
        else:
            print('请输入正确的编号值')


if __name__ == '__main__':
    control()
